import Vue from 'vue'
import Router from 'vue-router'
import store from '@/store'
import { constantRouterMap } from './router.config.js'
import { loginverifyBind,getToken } from '@/api/wxLogin.js'
import { Notify,Dialog } from 'vant';
import { getH5UserInfo } from '../api/user.js'

// hack router push callback
const originalPush = Router.prototype.push
Router.prototype.push = function push(location, onResolve, onReject) {
  if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
  return originalPush.call(this, location).catch(err => err)
}

Vue.use(Router)
// TODO: 把mode和bse的变量改到环境变量中
const createRouter = () =>
  new Router({
    // 如果你是 history模式 需要配置vue.config.js publicPath
    // mode: process.env.NODE_ENV == 'development' ? 'hash' : 'history',
    mode: 'history',
    // base: process.env.BASE_URL,
    // base: process.env.NODE_ENV == 'development' ? '' : 'tqckf',
    base: process.env.NODE_ENV == 'development' ? '' : '',
    scrollBehavior: () => ({ y: 0 }),
    routes: constantRouterMap
  })

const router = createRouter()

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}
// // 微信模式下 注释掉
// router.beforeEach(async (to, from, next) => {
//   const isLogin = store.state.user.isLogin
//   // 微信H5登录流 -》 获取code从后台交换token的信息
//   console.log(to, to.query)
//   console.log('store',store)
//   console.log('是否登陆',isLogin)
//   console.log('获取链接code',to.query.code)
//   if (to.query.code && !isLogin) {
//     console.log('to.query.code && !isLogin')
//     try {
//       const res = await loginverifyBind({ code: to.query.code })
//       if (res.data.token) {
//         console.log('开始挂数据')
//         // 把接口返回的token 用户信息 微信信息全部挂在store中 给token做缓存
//         store.commit('setAllUserInfo', res.data)
//         // 设置为已登录
//         store.dispatch('setUserInfo')
//       }
//     } catch (error) {
//       Notify('登录失败' + error.msg)
//     } finally {
//       console.log('进入')
//       next()
//     }
//     // loginverifyBind({ code: to.query.code }).then(res => {
//     //   if (res.data.token) {
//     //     // 把接口返回的token 用户信息 微信信息全部挂在store中 给token做缓存
//     //     store.commit('setAllUserInfo', res.data)
//     //     // 设置为已登录
//     //     store.dispatch('setUserInfo')
//     //   }
//     // })
//   } else if (!isLogin) {
//     Notify('需要进行登陆')
//     // store.state.
//     console.log('!isLogin')
//     // 如果没有code且没登录 默认是cookies已挂载 可以获取用户信息
//     store.dispatch('setUserInfo')
//     next()
//   } else {
//     console.log('else')
//     next()
//   }
//   // 动态修改标题
//   document.title = to.meta.title
// })


//设置白名单
const  loginList =['/user']
//h5 模式下
router.beforeEach(async (to, from, next) => {
  const isLogin = store.state.user.isLogin
  const token =getToken()
  //如果游客模式只有不在白名单需要登陆
  console.log('store.state',store.state)
  console.log('islogin',isLogin )
  console.log('aa',store.state.user,!store.state.user.userInfo.userName)
  if (!token||token ==='h5-guest') {
    if(!store.state.user.userInfo.username){
      console.log('没有token','设置token')
      getH5UserInfo().then(res => {
        if (res.data) {
          console.log('res.data',res.data)
          // 把接口返回的token 用户信息 微信信息全部挂在store中 给token做缓存
          store.commit('setH5UserInfo', res.data)
          // 设置为已登录
          store.dispatch('setUserInfo')
        }
      }).then(error=>{
        console.log('失败',error)
      })
      //去获取游客信息
    }
    console.log('游客模式',token,to.path,loginList.indexOf(to.path));
    if(loginList.indexOf(to.path)!==-1){
      Dialog.confirm({
        // title: '标题',
        message: '是否去登陆',
      }).then(() => {
          next({
            path:'/login'
          })
        })
        .catch(() => {
          // on cancel
        });
    }else{
      next();
    }
  //判断是否已经登陆
  } else if (isLogin){
    console.log('已经登陆直接跳转')
    // 已经登陆直接跳转
    next()
  } else {
    console.log('未登陆跳转')
    store.dispatch('setUserBaseInfo')
    // getH5UserInfo().then(res => {
    //   console.log('getH5UserInfo res',res)
    //   if (res.data) {
    //     console.log('resdata',res.data)
    //     store.dispatch('setUserBaseInfo',res.data.ckfUserbase)
    //   }
    // }).then(error=>{
    //   console.log('getH5UserInfo失败',error)
    // })
    // 未登陆跳转
    next()
  }
  // 动态修改标题
  document.title = to.meta.title
})
export default router
